package main

import "fmt"

func main() {
	var a int = 10
	// 变量有2层含义: 变量的内存 变量的地址
	fmt.Println("变量的内存: ", a)
	fmt.Println("变量的地址: ", &a)

	// 保存某个变量的地址, 需要指针类型 *int 保存 int 的地址 **int 保存 *int 的地址
	// 声明(定义) 定义只是特殊的声明
	var p *int // 定义一个变量 p, 类型为 *int
	p = &a // 指针变量(p)指向谁, 就把谁的地址赋值给指针变量(p)
	fmt.Printf("p = %v, &a = %v\n", p, &a)

	*p = 666 // *p操作的不是p的内存, 而是p所指向的内存a
	fmt.Printf("*p = %v, a = %v\n", *p, a)

	// 不可以操作没有合法指向的指针
	var i *int
	fmt.Println("i = ", i)

	//*i = 888 // err i没有合法指向
}
